package com.class05.controller;

import com.class05.pojo.Cat;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

@Controller
@RequestMapping("/pay")
// @RequestMapping可以放在类上或者方法上
// 常用的一些属性：
// value 主要用来指定请求路径
// method 指定请求方式  可以利用RequestMethod枚举类中的方法去指定请求方式
// consumes 指定请求的媒体类型
// produces 指定响应的媒体类型
// params 指定请求参数
// headers 指定请求头
// path 指定请求路径
// mapping 指定多个路径
@ResponseBody
public class PathController {


    /*    一、路径问题：
        1、精准匹配 示例：http://localhost:8080/path/test
        2、模糊匹配：单层匹配：*   多层匹配：** 只能放在路径的最后
        完整路径：协议：//ip:port:端口号/项目名/类路径/方法路径 + {参数}
        3、常见的传入参数有以下几种方式：
        3.1、param传参：语法格式是： ?参数名=value&参数名2=value2
            一般会配合@RequestParam注解进行参数接受绑定,当路径参数名和方法参数名一致，
            可以省略@RequestParam
        示例：http://localhost:8080/path/test?name=zhangsan&age=18


        3.2、path传参：语法格式是：/{参数名}/{参数名}
             必须配合@PathVariable注解进行参数接受绑定
        示例：http://localhost:8080/path/test/zhangsan/18
        3.3、json传参：语法格式是：json格式：{参数名:value,参数名2:value2} 一般用于post请求
            一般会配合@RequestBody注解进行参数接受绑定，它会讲json格式的数据转换为对象，
            示例：http://localhost:8080/path/test
            请求体：    ｛
            "name":"zhangsan",
            "age":18
            ｝

        */
//


//    单层模糊匹配的演示  localhost:8080/path/test/a
//    http://localhost:8080/path/test/ajfjfjfjfjfjfhhgh
    @RequestMapping(value ="/test/*", method = RequestMethod.GET)
    public String testPath() {
        return "path/test";
    }


//    多层模糊匹配的演示  localhost:8080/path/test1/a/b/e/f/g
    @RequestMapping("/test1/**")
    public String testPath2() {
        return "多层模糊匹配的演示";
    }



//   3.1 示例：http://localhost:8080/path/testParam?name=zhangsan&age=18
//    @RequestParam 常用属性：
//    value 指定参数名
//    required 指定是否必须
//    defaultValue 指定默认值
//


    @RequestMapping(value = "/testParam", method = RequestMethod.GET)
    public String testParam(@RequestParam("name") String namesss, Integer age) {
        System.out.println("name = " + namesss + ", age = " + age);
        return "name = " + namesss + ", age = " + age;
    }


//    http://localhost:8080/path/testParam1?name=zhangsan
    @RequestMapping(value = "/testParam1", method = RequestMethod.GET)
    public String testParam1(@RequestParam("name") String namesss,@RequestParam(required = false,
            defaultValue = "28") Integer age) {
        System.out.println("name = " + namesss + ", age = " + age);
        return "name = " + namesss + ", age = " + age;
    }


//    http://localhost:8080/path/test/zhangsan/18  路径传参
    @RequestMapping(value = "/test/{nam}/{age}",method = RequestMethod.GET)
    public String testPath(@PathVariable("nam") String name,@PathVariable("age") Integer age){
        System.out.println("name = " + name + ", age = " + age);
        return "name = " + name + ", age = " + age;
    }


//     示例：http://localhost:8080/path/testJson
//            请求体：    ｛
//            "name":"zhangsan",
//            "age":18
//            ｝



    @RequestMapping(value = "/testJson",method = RequestMethod.POST)
    public Cat testJson(@RequestBody Cat cat){
        System.out.println("cat = " + cat);
        return cat;
    }

//    3.4接收cookie 语法格式：@CookieValue("cookieName") cookieName就是cookie的名称
//    示例：http://localhost:8080/path/testCookie
//       会配合@CookieValue注解进行参数接受绑定
    @RequestMapping(value = "/testCookie", method =RequestMethod.GET)
    public String testCookie(@CookieValue("cookieName") String cookieName){
        System.out.println("cookieName = " + cookieName);
        return "cookieName = " + cookieName;
    }

    @RequestMapping(value = "/saveCookie", method = RequestMethod.GET)
    public String saveCookie(HttpServletResponse response){
        response.addCookie(new Cookie("cookieName","cookieValue"));
        return "saveCookie";
    }



}
